Interface & Inheritance
重载
Java允许多个方法拥有相同名称,只要他们的参数不同,这就是Java中的重载
重载的优缺点:
- 代码基本一样
- 对其余猎豹不适用,需要增加重载
- 难维护
Hypernym and Hyponym
上位词与下位词
如Dog与poodle、malamute等狗的品种,前者为后者的上位词,后者为前者的下位词
Java中也有类似的概念,如我们可以把List作为SLList与ArrayList的上位词
在Java中表示这种属性:
- 给上位词定义一个引用属性
- 指定某些词为该上位词的下位词
- 使用关键词
interface来定义上位词 - 使用关键词
implements来定位下位词
接口内容:
1 | package lec8; |
下位词部分修改:
1 | public class ArrayList<T> implements List61B<T> |
这样在使用时我们只需要以该接口作为类型定义即可
重写
若你有一个子类实现接口,其方法与超类的签名相同,则可以在子类中重写来覆盖该方法
有相同名称而不同签名的方法叫做重写
在要重写的方法上面添加@override标签,当该方法不是一个重写方法时,该代码不会被编译
使用该标签的优点:
- 主要优点:防止拼写错误,当标记了@override,但方法并没有被重写,就会爆CE
- 提醒程序员方法来自于更高级的继承
Interface Inheritance
使用implements关键字来指定子类所具备的能力叫作接口继承
- 接口:所有方法签名的列表
- 继承:子类继承了来自超类的接口
- 接口继承指定了子类可以做什么,而没有指定怎么做
- 子类必须重写所有方法,否则会CE
Implementation Inheritance
接口继承只继承了签名,而没有继承实现
Java允许另一种继承:实现继承,使得子类可以继承签名与实现
使用default关键字来指定一个子类可以从接口继承的方法
1 | // implementation inheritance |
(在接口文件中写默认的print方法,子类可以继承该方法)
1 | // 重写接口中的print方法 |
(针对特定子类,可以对default方法进行重写)
Abstract Data Type
抽象数据类型(ADT)仅由其操作定义,而不由其实现定义